package com.kobeliu.entity;

/**
 * LeetCode 977
 *
 * 给你一个按 非递减顺序 排序的整数数组 nums，返回 每个数字的平方 组成的新数组，要求也按 非递减顺序 排序。
 *
 * O(nlogn)是简单的，现在的要求是使用O(n)的时间复杂度来解决
 *
 * 示例 1：
 * 输入：nums = [-4,-1,0,3,10]
 * 输出：[0,1,9,16,100]
 * 解释：平方后，数组变为 [16,1,0,9,100]
 * 排序后，数组变为 [0,1,9,16,100]
 *
 * 示例 2：
 * 输入：nums = [-7,-3,2,3,11]
 * 输出：[4,9,9,49,121]
 *
 *
 *
 */

public class Demo_29_No977 {

    public static void main(String[] args) {


        int[] nums = {-4,-1,0,3,5};
        int[] ints = sortedSquares(nums);

        for (int i = 0; i < ints.length ; i++) {
            System.out.println(ints[i]);
        }

    }

    public static int[] sortedSquares(int[] nums) {

        int[] ints = new int[nums.length];
        int temp = nums.length-1;
        int left = 0;
        int right = nums.length-1;

        //平方的最大值一定在数组的最左边或者最右边
        while(left <= right){
            if(nums[left]*nums[left] >= nums[right]*nums[right]){
                ints[temp--] = nums[left]*nums[left];
                left++;
            }else{
                ints[temp--] = nums[right]*nums[right];
                right--;
            }
        }
        return ints;

    }
}
